package com.str.demo02;

public class Test {
    public static void main(String[] args) {
        System.out.println("可变字符串！！");
        /**
         * StringBuffer 和 StringBuilder
         * 因为 String 类每次都是创建对象，比如：字符串的拼接，在循环中，每次循环都会创建新的字符串对象，
         * 然后扔掉旧的字符串。这样，绝大部分字符串都是临时对象，不但浪费内存，还会影响GC效率。
         * String s = "";
         * for (int i = 0; i < 1000; i++) {
         *     s = s + "," + i;
         * }
         * 为了能高效拼接字符串，Java标准库提供了StringBuilder，它是一个可变对象，
         * 可以预分配缓冲区，这样，往 StringBuilder 中新增字符时，不会创建新的临时对象。
         * 两者：都是字符串的缓冲区，用于字符串的拼接，为解决上面提到字符串拼接产生太多中间对象的问题而提供的一个类，
         *      目的为了对象重复利用，提高效率（字符串的不可变性，导致重复创建对象）。（或者用于频繁修改的字符串）
         *      StringBuffer 和 StringBuilder 可以减少重复创建对象，不浪费内存。优先使用 StringBuilder
         * 区别：StringBuffer 运行效率慢，线程安全（慢，安全）
         *      StringBuilder 运行快 线程不安全（快，不安全）
         * 选用：如果是在单线程的环境中，建议使用StringBuilder，它要比StringBuffer快；
         *      如果是在多线程的环境中，建议使用StringBuffer，它是线程安全的；
         *      StringBuilder 实际上是我们的首选，只有在多线程时才可以考虑使用StringBuffer。
         *      控件的依赖、代码生成、仓库管理
         */

        // StringBuffer 和 StringBuilder
        StringBuffer sb = new StringBuffer();
        // 1.append() 追加
        sb.append("java is first lang");
        System.out.println(sb); // java is first lang
        // 2. insert(offset,str); 添加、插入
        sb.insert(0,"在第一个位置插入 ");
        System.out.println(sb); // 在第一个位置插入 java is first lang
        // 3.replace(start,end,str); 字符串的替换（那个位置开始，那个位置结束） 左闭又开 [start,end)
        String str = "I agree ";
        sb.replace(0,9,str);
        System.out.println(sb); // I agree java is first lang
        // 4.length() 获取字符的长度
        System.out.println(sb.length()); // 26
        // 5.delete(); 删除 左闭又开 [start,end)
        sb.delete(0,3);
        System.out.println(sb); // gree java is first lang
        // 6.清空
        sb.delete(0,sb.length());
        System.out.println(sb); // 空

        System.out.println("===== stringBuilder ======");
        // StringBuilder 学习
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("in the world").append(" the best language ").append("is PHP");
        System.out.println(stringBuilder);
        // 1.insert(offset,str) 在指定位置插入字符串
        stringBuilder.insert(0,",java disagree this statement");
        System.out.println(stringBuilder.lastIndexOf("the")); // 42 最后出现的位置
        // 2.replace() 替换
        stringBuilder.replace(0,5,"哈哈哈哈");
        System.out.println(stringBuilder); // 哈哈哈哈 disagree this statementin the world the best language is PHP
        // 3.delete() 删除操作
        stringBuilder.delete(0,5);
        System.out.println(stringBuilder);// disagree this statementin the world the best language is PHP
        // 4.delete(0,stringBuilder.length()); 清空操作
        System.out.println(stringBuilder.length());// 60
        stringBuilder.delete(0,stringBuilder.length());
        System.out.println(stringBuilder);// 空
    }
}
